package com.itcam.lease.common.exception;

import com.itcam.lease.common.result.Result;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice // 定义一个全局异常处理器
public class GlobalExceptionHandler {

    /*
         `@ControllerAdvice`用于声明处理全局Controller方法异常的类

         `@ExceptionHandler`用于声明处理异常的方法，`value`属性用于声明该方法处理的异常类型

         `@ResponseBody`表示将方法的返回值作为HTTP的响应体
     */

    @ResponseBody // 注解用于将方法的返回值直接写入 HTTP 响应体中
    @ExceptionHandler(LeaseException.class) // 用于指定该方法处理的异常类型
    public Result handleException(LeaseException e) { // 处理自定义异常 LeaseException 的方法
        e.printStackTrace(); // 打印异常堆栈跟踪
        return Result.fail(e.getCode(), e.getMessage()); // 返回一个失败的结果，包含异常代码和消息
    }

    @ResponseBody
    @ExceptionHandler(RuntimeException.class) // 用于指定该方法处理的异常类型
    public Result handleException(RuntimeException e) { // 处理运行时异常 RuntimeException 的方法
        e.printStackTrace(); // 打印异常堆栈跟踪
        return Result.fail(); // 返回一个失败的结果，没有具体的错误信息
    }
}

